﻿using BLevy.Datos.Repositories;
using BLevy.Entidad;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Transactions;

namespace BLevy.Negocio
{
    public class Roles
    {

        public static IList<Rol> FindAll()
        {
            try
            {
                IRolRepository _repository = new RolRepository();
                return _repository.FindAll();
            }
            catch (Exception e)
            {
                throw e;
            }
        }

        public static int AddPermisosRol(PermisoRol permisos)
        {
            try
            {
                IRolRepository _repository = new RolRepository();
                return _repository.AddPermisosRol(permisos);
            }
            catch (Exception e)
            {
                throw e;
            }
        }

        public static Rol FindById(int id)
        {
            try
            {
                IRolRepository _repository = new RolRepository();
                return _repository.FindById(id);
            }
            catch (Exception e)
            {
                throw e;
            }
        }

        public static int Add(Rol newEntity, PermisoRol permisos)
        {
            IRolRepository _repository = new RolRepository();

            int rol_id;
            bool resultado = true;

            try
            {
                using (TransactionScope scope = new TransactionScope())
                {
                    rol_id = _repository.Add(newEntity);
                    if (rol_id > 0)
                    {
                        permisos.rol_id = rol_id;

                        int res = _repository.AddPermisosRol(permisos);
                        if (res > 0)
                        {
                            scope.Complete();
                        }
                        else
                        {

                            resultado = false;
                            rol_id = 0;
                        }
                    }
                    else
                    {
                        resultado = false;
                        rol_id = 0;
                    }
                }
            }
            catch (Exception e)
            {
                throw e;
            }

            return rol_id;
        }


        public static int Modify(Rol entity)
        {
            IRolRepository _repository = new RolRepository();
            int res = 0;
            bool resultado = true;

            try
            {
                using (TransactionScope scope = new TransactionScope())
                {
                    res = _repository.Modify(entity);
                    if (res > 0)
                    {
                        int update_permisos = _repository.ModificarPermisos(entity.permisos);
                        if (update_permisos == 0)
                        {
                            resultado = false;
                            res = 0;
                        }
                    }
                    else
                    {
                        resultado = false;
                        res = 0;
                    }

                    if (resultado == true)
                    {
                        scope.Complete();
                    }
                }
            }
            catch (Exception e)
            {
                throw e;
            }
            return res;

        }

        public static PermisoRol FindPermisosByIdRol(int rol_id)
        {
            try
            {
                IRolRepository _repository = new RolRepository();
                return _repository.FindPermisosByIdRol(rol_id);
            }
            catch (Exception e)
            {
                throw e;
            }
        }


        public static IList<Rol> FindAllConPermisos()
        {
            try
            {
                IRolRepository _repository = new RolRepository();
                return _repository.FindAllConPermisos();
            }
            catch (Exception e)
            {
                throw e;
            }
        }


        public static int Remove(int id)
        {
            try
            {
                IRolRepository _repository = new RolRepository();
                return _repository.Remove(id);
            }
            catch (Exception e)
            {
                throw e;
            }
        }

    }
}
